home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -serious- / programming / other / evaluate / eval.c next >
C/C++ Source or Header  |  2000-02-28  |  902b  |  37 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "evaluate.h"
  4.  
  5. int main(int argc, char **argv) {
  6.   double realres;
  7.   int error, type;
  8.   long intres;
  9.  
  10.   if (argc < 2) {
  11.     printf("usage: %s <expression>\n", argv[0]);
  12.     return EXIT_FAILURE;
  13.   }
  14.  
  15.   printf("evaluating '%s'\n", argv[1]);
  16.   type = Calculate(argv[1], &intres, &realres, &error);
  17.  
  18.   if (error != RESULT_OK) {
  19.     char *message = "unknown error";
  20.     switch (error) {
  21.     case ERROR_SYNTAX:      message = "syntax error\n"; break;
  22.     case ERROR_VARNOTFOUND: message = "variable not found\n"; break;
  23.     case ERROR_NOMEM:       message = "not enough memory available\n"; break;
  24.     case ERROR_DIV0:        message = "division by zero\n"; break;
  25.     }
  26.     printf(message);
  27.     return EXIT_FAILURE;
  28.   }
  29.  
  30.   if (type == RESULT_INTEGER)
  31.     printf("result = %ld\n", intres);
  32.   else
  33.     printf("result = %g\n", realres);
  34.  
  35.   return EXIT_SUCCESS;
  36. }
  37.